1 package org.smartcomps.twister.engine.messaging;
2
3 import junit.framework.TestCase;
4 import org.smartcomps.twister.engine.core.definition.TestReceive;
5 import org.smartcomps.twister.engine.core.definition.TestProcess;
6 import org.smartcomps.twister.engine.priv.core.dynamic.ProcessInstance;
7 import org.smartcomps.twister.engine.priv.core.dynamic.ExecutionContext;
8 import org.smartcomps.twister.engine.priv.core.dynamic.ProcessInstanceFactory;
9 import org.smartcomps.twister.engine.priv.core.definition.*;
10 import org.smartcomps.twister.engine.TwisterEngineFactory;
11 import org.smartcomps.twister.common.transaction.TransactionManager;
12 import org.smartcomps.twister.common.lifecycle.LifecycleManager;
13 import org.dom4j.Document;
14 import org.dom4j.DocumentHelper;
15 import org.dom4j.Element;
16 import net.sf.hibernate.tool.hbm2ddl.SchemaExport;
17 import net.sf.hibernate.cfg.Configuration;
18
19 import java.util.Map;
20 import java.util.HashMap;
21 import java.util.HashSet;
22 import java.util.Calendar;
23
24 import com.sun.msv.datatype.xsd.DatatypeFactory;
25
26 /***
27 * Testing the MessageController implementation and how it routes messages to
28 * waiting activities.
29 */
30 public class TestMessageController extends TestCase {
31
32 private TestReceive testReceive = new TestReceive();
33 private TestProcess testProcess = new TestProcess();
34
35 private TwisterProcess process;
36 private Pick pick;
37 private Invoke invoke1;
38 private Invoke invoke2;
39 private Invoke invoke3;
40
41 protected void setUp() throws Exception {
42 LifecycleManager.getLifecycleManager().createResources();
43 LifecycleManager.getLifecycleManager().startResources();
44
45 SchemaExport schemaExport = new SchemaExport(new Configuration().configure());
46 schemaExport.create(true, true);
47
48 TransactionManager.beginTransaction();
49 }
50
51 protected void tearDown() throws Exception {
52 TransactionManager.commitTransaction();
53
54 LifecycleManager.getLifecycleManager().stopResources();
55 LifecycleManager.getLifecycleManager().destroyResources();
56 }
57
58 public void testAcknowledgeReceive() throws Exception {
59 testProcess.testCreateWithCorrelation();
60 testReceive.testCreateWithValues();
61 TransactionManager.commitTransaction();
62 TransactionManager.beginTransaction();
63
64 // Executing, we're testing the reception on an already waiting receive ec
65 Map corrProp = new HashMap();
66 corrProp.put(TestProcess.CORRELATION_PROP1, "2578");
67 corrProp.put(TestProcess.CORRELATION_PROP2, "12");
68
69 TestReceive.receive.execute(TestProcess.CORRELATION_NAME, corrProp);
70
71 TransactionManager.commitTransaction();
72
73 Document doc = DocumentHelper.createDocument();
74 Element root = doc.addElement("message").addElement("main").addElement("root");
75 root.addElement("orderid").setText("2578");
76 root.addElement("customerid").setText("12");
77 TwisterEngineFactory.getEngine().acknowledge(TestReceive.REC_PARTNER
78 , TestReceive.REC_PORT, TestReceive.REC_OPERATION, doc);
79
80 Thread.sleep(5000);
81 TransactionManager.beginTransaction();
82
83 ProcessInstance executedInstance = ProcessInstanceFactory.findInstanceByCorrelation(TestProcess.CORRELATION_NAME, corrProp);
84 assertEquals("Process is not completed after execution ended", ProcessInstance.COMPLETED, executedInstance.getStatus());
85 assertEquals("Receive is not completed after execution ended", ExecutionContext.COMPLETED, executedInstance.getChildExecutionContext().getStatus());
86
87 }
88
89 public void testAcknowledgeExistingPick() throws Exception {
90 createPick(false);
91
92 Map corrProp = new HashMap();
93 corrProp.put("corrProp21", "ZZ45E1");
94 corrProp.put("corrProp22", "ZA21T");
95 pick.execute("correlation2", corrProp);
96 TransactionManager.commitTransaction();
97
98 TransactionManager.beginTransaction();
99 ProcessInstance executedInstance = ProcessInstanceFactory.findInstanceByCorrelation("correlation2", corrProp);
100 assertEquals("Process is not active after juste executed", ProcessInstance.ACTIVE, executedInstance.getStatus());
101 TransactionManager.commitTransaction();
102
103 Document message = DocumentHelper.createDocument();
104 Element mainPart = message.addElement("message").addElement("main");
105 mainPart.addElement("shipid").setText("ZZ45E1");
106 mainPart.addElement("shipperid").setText("ZA21T");
107 mainPart.addElement("truckid").setText("VW245");
108 TwisterEngineFactory.getEngine().acknowledge("link2", "port2", "op2", message);
109
110 Thread.sleep(5000);
111 TransactionManager.beginTransaction();
112 // By selecting the instance this way, we make sure that executing the Pick
113 // resulted in the right correlation creation.
114 executedInstance = ProcessInstanceFactory.findInstanceByCorrelation("correlation2", corrProp);
115 assertEquals("Process is not completed after execution ended", ProcessInstance.COMPLETED, executedInstance.getStatus());
116
117 corrProp = new HashMap();
118 corrProp.put("corrProp3", "VW245");
119 executedInstance = ProcessInstanceFactory.findInstanceByCorrelation("correlation2", corrProp);
120 assertEquals("Process is not completed after execution ended", ProcessInstance.COMPLETED, executedInstance.getStatus());
121 }
122
123 public void testAcknowledgePickCreateInstance() throws Exception {
124 createPick(true);
125 TransactionManager.commitTransaction();
126
127 Document message = DocumentHelper.createDocument();
128 Element mainPart = message.addElement("message").addElement("main");
129 mainPart.addElement("shipid").setText("ZZ45E1");
130 mainPart.addElement("shipperid").setText("ZA21T");
131 mainPart.addElement("truckid").setText("VW245");
132 TwisterEngineFactory.getEngine().acknowledge("link2", "port2", "op2", message);
133
134 Thread.sleep(5000);
135 TransactionManager.beginTransaction();
136
137 Map corrProp = new HashMap();
138 corrProp.put("corrProp21", "ZZ45E1");
139 corrProp.put("corrProp22", "ZA21T");
140 // By selecting the instance this way, we make sure that executing the Pick
141 // resulted in the right correlation creation.
142 ProcessInstance executedInstance = ProcessInstanceFactory.findInstanceByCorrelation("correlation2", corrProp);
143 assertEquals("Process is not completed after execution ended", ProcessInstance.COMPLETED, executedInstance.getStatus());
144
145 corrProp = new HashMap();
146 corrProp.put("corrProp3", "VW245");
147 executedInstance = ProcessInstanceFactory.findInstanceByCorrelation("correlation2", corrProp);
148 assertEquals("Process is not completed after execution ended", ProcessInstance.COMPLETED, executedInstance.getStatus());
149 }
150
151 private void createPick(boolean createInstance) throws Exception {
152 process = ProcessFactory.createProcess("TestProcess");
153 ProcessFactory.addProperty(process, "corrProp11", "xs:string", "tns:msg1", "main", "/orderid");
154 ProcessFactory.addProperty(process, "corrProp12", "xs:string", "tns:msg2", "main", "/customerid");
155 ProcessFactory.addProperty(process, "corrProp21", "xs:string", "tns:msg1", "main", "/shipid");
156 ProcessFactory.addProperty(process, "corrProp22", "xs:string", "tns:msg2", "main", "/shipperid");
157 ProcessFactory.addProperty(process, "corrProp3", "xs:string", "tns:msg3", "main", "/truckid");
158 ProcessFactory.addCorrelation(process, "correlation1", "corrProp11 corrProp12");
159 ProcessFactory.addCorrelation(process, "correlation2", "corrProp21 corrProp22");
160 ProcessFactory.addCorrelation(process, "correlation3", "corrProp3");
161
162 pick = (Pick) ActivityFactory.createActivity(Pick.class, process);
163 pick.setCreateInstance(createInstance);
164 invoke1 = (Invoke) ActivityFactory.createActivity(Invoke.class, pick);
165 invoke1.setName("invoke1");
166 invoke1.setPartner("partner1");
167 invoke1.setOperation("operation1");
168 invoke1.setPortType("porttype1");
169 invoke2 = (Invoke) ActivityFactory.createActivity(Invoke.class, pick);
170 invoke1.setName("invoke2");
171 invoke2.setPartner("partner2");
172 invoke2.setOperation("operation2");
173 invoke2.setPortType("porttype2");
174 invoke3 = (Invoke) ActivityFactory.createActivity(Invoke.class, pick);
175 invoke1.setName("invoke3");
176 invoke3.setPartner("partner3");
177 invoke3.setOperation("operation3");
178 invoke3.setPortType("porttype3");
179
180 CorrelationRef cref1 = ActivityFactory.createCorrelationRef("correlation1", true, CorrelationRef.IN);
181 HashSet cref1List = new HashSet();
182 cref1List.add(cref1);
183 ActivityFactory.addMessageEvent(pick, invoke1, "link1", "port1", "op1", "var1", cref1List);
184 // We're working with the second correlation in this test and if we want to
185 // have createInstance, correlation must be initiated too
186 CorrelationRef cref2 = ActivityFactory.createCorrelationRef("correlation2", createInstance, CorrelationRef.IN);
187 CorrelationRef cref3 = ActivityFactory.createCorrelationRef("correlation3", true, CorrelationRef.IN);
188 HashSet cref2List = new HashSet();
189 cref2List.add(cref2);
190 cref2List.add(cref3);
191 ActivityFactory.addMessageEvent(pick, invoke2, "link2", "port2", "op2", "var2", cref2List);
192 ActivityFactory.addAlarmEvent(pick, invoke3, createDate30SecsLater(), AlarmEvent.DEADLINE_EXPR);
193 }
194
195 private String createDate30SecsLater() throws Exception {
196 Calendar nowPlus30 = Calendar.getInstance();
197 nowPlus30.add(Calendar.SECOND, 30);
198 String nowPlus30Str = DatatypeFactory.getTypeByName("dateTime").serializeJavaObject(nowPlus30, null);
199 System.out.println("=> " + nowPlus30Str);
200 return nowPlus30Str;
201 }
202
203 }
This page was automatically generated by Maven